Micron Document
πŸŽ–οΈGitΠ―Ρ€Π°πŸŽ–οΈ

Commit 9620984a68821da831475d160264cf0f74f34b4d


Parents : b3ed54a
Author : James Rich <2199651+jamesarich@users.noreply.github.com>
Signature : Signature validation error
Date : 2026-08-19T23:04:45Z
Committer : GitHub <noreply@github.com>
Date : 2026-08-19T23:04:45Z

feat(tak): add TAK Mesh Channel setting for outbound TAK traffic (#6770)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

Changes

19 files changed, 157 insertions(+), 1 deletions(-)


Diff

diff --git a/.skills/compose-ui/strings-index.txt b/.skills/compose-ui/strings-index.txt
index 47da89c5e8..3fda8c72a2 100644
--- a/.skills/compose-ui/strings-index.txt
+++ b/.skills/compose-ui/strings-index.txt
@@ -1706,6 +1706,9 @@ tak_role_teamlead
tak_role_teammember
tak_role_unspecified
tak_server
+tak_server_channel
+tak_server_channel_desc
+tak_server_channel_option
tak_server_enabled
tak_server_enabled_desc
tak_server_export_data_package_desc

diff --git a/core/prefs/src/commonMain/kotlin/org/meshtastic/core/prefs/tak/TakPrefsImpl.kt b/core/prefs/src/commonMain/kotlin/org/meshtastic/core/prefs/tak/TakPrefsImpl.kt
index ea614fd85c..a80cb215e8 100644
--- a/core/prefs/src/commonMain/kotlin/org/meshtastic/core/prefs/tak/TakPrefsImpl.kt
+++ b/core/prefs/src/commonMain/kotlin/org/meshtastic/core/prefs/tak/TakPrefsImpl.kt
@@ -18,6 +18,7 @@ package org.meshtastic.core.prefs.tak
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.edit
+import androidx.datastore.preferences.core.intPreferencesKey
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.flow.SharingStarted
@@ -48,8 +49,16 @@ class TakPrefsImpl(private val dataStore: UiDataStore, dispatchers: CoroutineDis
scope.launch { dataStore.edit { prefs -> prefs[KEY_TAK_MESH_TO_COT] = enabled } }
}
+ override val takServerChannel: StateFlow<Int> =
+ dataStore.data.map { it[KEY_TAK_SERVER_CHANNEL] ?: 0 }.stateIn(scope, SharingStarted.Eagerly, 0)
+
+ override fun setTakServerChannel(index: Int) {
+ scope.launch { dataStore.edit { prefs -> prefs[KEY_TAK_SERVER_CHANNEL] = index } }
+ }
+
companion object {
val KEY_TAK_SERVER_ENABLED = booleanPreferencesKey("tak_server_enabled")
val KEY_TAK_MESH_TO_COT = booleanPreferencesKey("tak_mesh_to_cot")
+ val KEY_TAK_SERVER_CHANNEL = intPreferencesKey("tak_server_channel")
}
}

diff --git a/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/AppPreferences.kt b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/AppPreferences.kt
index ea5a1c6480..a91be5a2cf 100644
--- a/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/AppPreferences.kt
+++ b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/AppPreferences.kt
@@ -377,6 +377,14 @@ interface TakPrefs {
val isMeshToCotEnabled: StateFlow<Boolean>
fun setMeshToCotEnabled(enabled: Boolean)
+
+ /**
+ * Meshtastic channel index used for outbound TAK traffic (TAK client -> mesh). Parity with iOS's `takServerChannel`
+ * setting and the legacy ATAK plugin's channel option. Defaults to 0 (the primary channel).
+ */
+ val takServerChannel: StateFlow<Int>
+
+ fun setTakServerChannel(index: Int)
}
/** Reactive interface for App Functions (system AI integration) preferences. */

diff --git a/core/resources/src/commonMain/composeResources/values/strings.xml b/core/resources/src/commonMain/composeResources/values/strings.xml
index 475c8f8fad..6a4403425d 100644
--- a/core/resources/src/commonMain/composeResources/values/strings.xml
+++ b/core/resources/src/commonMain/composeResources/values/strings.xml
@@ -1754,6 +1754,9 @@
<string name="tak_role_teammember">Team Member</string>
<string name="tak_role_unspecified">Unspecified</string>
<string name="tak_server">TAK Server</string>
+ <string name="tak_server_channel">TAK Mesh Channel</string>
+ <string name="tak_server_channel_desc">Meshtastic channel used for outgoing TAK traffic</string>
+ <string name="tak_server_channel_option">%1$d: %2$s</string>
<string name="tak_server_enabled">Enable Local TAK Server</string>
<string name="tak_server_enabled_desc">Starts a local TLS server on port 8089 for ATAK connections</string>
<string name="tak_server_export_data_package_desc">Generate .zip for ATAK to connect to this server</string>

diff --git a/core/service/src/commonTest/kotlin/org/meshtastic/core/service/MeshServiceOrchestratorTest.kt b/core/service/src/commonTest/kotlin/org/meshtastic/core/service/MeshServiceOrchestratorTest.kt
index 4a75758beb..7b26c2a1e8 100644
--- a/core/service/src/commonTest/kotlin/org/meshtastic/core/service/MeshServiceOrchestratorTest.kt
+++ b/core/service/src/commonTest/kotlin/org/meshtastic/core/service/MeshServiceOrchestratorTest.kt
@@ -124,6 +124,7 @@ class MeshServiceOrchestratorTest {
every { meshConfigHandler.moduleConfig } returns MutableStateFlow(LocalModuleConfig())
every { takPrefs.isTakServerEnabled } returns takEnabledFlow
every { takPrefs.isMeshToCotEnabled } returns MutableStateFlow(false)
+ every { takPrefs.takServerChannel } returns MutableStateFlow(0)
every { takServerManager.isRunning } returns takRunningFlow
every { takServerManager.inboundMessages } returns MutableSharedFlow()
every { nodeRepository.myNodeInfo } returns MutableStateFlow(null)
@@ -139,6 +140,7 @@ class MeshServiceOrchestratorTest {
serviceRepository = serviceRepository,
meshConfigHandler = meshConfigHandler,
nodeRepository = nodeRepository,
+ takPrefs = takPrefs,
meshToCotBroadcaster =
MeshToCotBroadcaster(
takServerManager = takServerManager,

diff --git a/core/takserver/src/commonMain/kotlin/org/meshtastic/core/takserver/TAKMeshIntegration.kt b/core/takserver/src/commonMain/kotlin/org/meshtastic/core/takserver/TAKMeshIntegration.kt
index 98cbeaa7b1..d536a63288 100644
--- a/core/takserver/src/commonMain/kotlin/org/meshtastic/core/takserver/TAKMeshIntegration.kt
+++ b/core/takserver/src/commonMain/kotlin/org/meshtastic/core/takserver/TAKMeshIntegration.kt
@@ -33,6 +33,7 @@ import org.meshtastic.core.repository.CommandSender
import org.meshtastic.core.repository.MeshConfigHandler
import org.meshtastic.core.repository.NodeRepository
import org.meshtastic.core.repository.ServiceRepository
+import org.meshtastic.core.repository.TakPrefs
import org.meshtastic.core.takserver.TAKPacketConversion.toCoTMessage
import org.meshtastic.core.takserver.TAKPacketConversion.toTAKPacket
import org.meshtastic.core.takserver.TAKPacketV2Conversion.toTAKPacketV2
@@ -96,6 +97,7 @@ class TAKMeshIntegration(
private val meshConfigHandler: MeshConfigHandler,
private val nodeRepository: NodeRepository,
private val meshToCotBroadcaster: MeshToCotBroadcaster,
+ private val takPrefs: TakPrefs,
) {
private val isRunning = AtomicBoolean(false)
@@ -299,6 +301,7 @@ class TAKMeshIntegration(
to = NodeAddress.ID_BROADCAST,
bytes = wirePayload.toByteString(),
dataType = PortNum.ATAK_PLUGIN_V2.value,
+ channel = takPrefs.takServerChannel.value,
)
commandSender.sendData(dataPacket)
Logger.d { "Sent V2 to mesh: ${cotMessage.type} (${wirePayload.size} bytes)" }
@@ -349,6 +352,7 @@ class TAKMeshIntegration(
to = NodeAddress.ID_BROADCAST,
bytes = wirePayload.toByteString(),
dataType = PortNum.ATAK_PLUGIN.value,
+ channel = takPrefs.takServerChannel.value,
)
commandSender.sendData(dataPacket)
Logger.d { "Sent V1 to mesh: ${cotMessage.type} (${wirePayload.size} bytes)" }

diff --git a/core/takserver/src/commonMain/kotlin/org/meshtastic/core/takserver/di/CoreTakServerModule.kt b/core/takserver/src/commonMain/kotlin/org/meshtastic/core/takserver/di/CoreTakServerModule.kt
index bc93610b4a..12836a92c9 100644
--- a/core/takserver/src/commonMain/kotlin/org/meshtastic/core/takserver/di/CoreTakServerModule.kt
+++ b/core/takserver/src/commonMain/kotlin/org/meshtastic/core/takserver/di/CoreTakServerModule.kt
@@ -54,6 +54,7 @@ class CoreTakServerModule {
meshConfigHandler: MeshConfigHandler,
nodeRepository: NodeRepository,
meshToCotBroadcaster: MeshToCotBroadcaster,
+ takPrefs: TakPrefs,
): TAKMeshIntegration = TAKMeshIntegration(
takServerManager,
commandSender,
@@ -61,5 +62,6 @@ class CoreTakServerModule {
meshConfigHandler,
nodeRepository,
meshToCotBroadcaster,
+ takPrefs,
)
}

diff --git a/core/takserver/src/commonTest/kotlin/org/meshtastic/core/takserver/TAKMeshIntegrationTest.kt b/core/takserver/src/commonTest/kotlin/org/meshtastic/core/takserver/TAKMeshIntegrationTest.kt
index f579b9d101..29e1d68cc4 100644
--- a/core/takserver/src/commonTest/kotlin/org/meshtastic/core/takserver/TAKMeshIntegrationTest.kt
+++ b/core/takserver/src/commonTest/kotlin/org/meshtastic/core/takserver/TAKMeshIntegrationTest.kt
@@ -179,6 +179,7 @@ class TAKMeshIntegrationTest {
meshConfigHandler = meshConfigHandler,
nodeRepository = nodeRepository,
meshToCotBroadcaster = broadcaster,
+ takPrefs = takPrefs,
)
}
@@ -321,6 +322,44 @@ class TAKMeshIntegrationTest {
assertEquals(PortNum.ATAK_PLUGIN.value, h.commandSender.sentPackets.single().dataType)
}
+ // ── Outbound channel selection ───────────────────────────────────────────
+
+ @Test
+ fun `default outbound channel is the primary channel`() = runTest(UnconfinedTestDispatcher()) {
+ val h = TestHarness(nodeRepository = FakeNodeRepository(firmwareVersion = "2.8.0.0"))
+ h.integration.start(backgroundScope)
+
+ h.serverManager.emitInbound(createPli("test-default-channel"))
+
+ assertEquals(0, h.commandSender.sentPackets.single().channel)
+ }
+
+ @Test
+ fun `configured takServerChannel is applied to V2 sends`() = runTest(UnconfinedTestDispatcher()) {
+ val h = TestHarness(nodeRepository = FakeNodeRepository(firmwareVersion = "2.8.0.0"))
+ h.takPrefs.setTakServerChannel(3)
+ h.integration.start(backgroundScope)
+
+ h.serverManager.emitInbound(createPli("test-v2-channel"))
+
+ val sent = h.commandSender.sentPackets.single()
+ assertEquals(PortNum.ATAK_PLUGIN_V2.value, sent.dataType)
+ assertEquals(3, sent.channel)
+ }
+
+ @Test
+ fun `configured takServerChannel is applied to V1 sends`() = runTest(UnconfinedTestDispatcher()) {
+ val h = TestHarness(nodeRepository = FakeNodeRepository(firmwareVersion = "2.7.0.0"))
+ h.takPrefs.setTakServerChannel(5)
+ h.integration.start(backgroundScope)
+
+ h.serverManager.emitInbound(createPli("test-v1-channel"))
+
+ val sent = h.commandSender.sentPackets.single()
+ assertEquals(PortNum.ATAK_PLUGIN.value, sent.dataType)
+ assertEquals(5, sent.channel)
+ }
+
@Test
fun `legacy firmware drops non-PLI non-GeoChat types`() = runTest(UnconfinedTestDispatcher()) {
val h = TestHarness(nodeRepository = FakeNodeRepository(firmwareVersion = "2.7.0.0"))

diff --git a/core/takserver/src/commonTest/kotlin/org/meshtastic/core/takserver/TakMeshTestRunnerTest.kt b/core/takserver/src/commonTest/kotlin/org/meshtastic/core/takserver/TakMeshTestRunnerTest.kt
index 1be745fe4f..bf1c5f9996 100644
--- a/core/takserver/src/commonTest/kotlin/org/meshtastic/core/takserver/TakMeshTestRunnerTest.kt
+++ b/core/takserver/src/commonTest/kotlin/org/meshtastic/core/takserver/TakMeshTestRunnerTest.kt
@@ -90,6 +90,7 @@ class TakMeshTestRunnerTest {
meshConfigHandler = meshConfigHandler,
nodeRepository = nodeRepository,
meshToCotBroadcaster = broadcaster,
+ takPrefs = takPrefs,
)
val runner = TakMeshTestRunner(integration)

diff --git a/core/testing/src/commonMain/kotlin/org/meshtastic/core/testing/FakeAppPreferences.kt b/core/testing/src/commonMain/kotlin/org/meshtastic/core/testing/FakeAppPreferences.kt
index 83be3195d8..860122c808 100644
--- a/core/testing/src/commonMain/kotlin/org/meshtastic/core/testing/FakeAppPreferences.kt
+++ b/core/testing/src/commonMain/kotlin/org/meshtastic/core/testing/FakeAppPreferences.kt
@@ -498,4 +498,10 @@ class FakeTakPrefs : org.meshtastic.core.repository.TakPrefs {
override fun setMeshToCotEnabled(enabled: Boolean) {
isMeshToCotEnabled.value = enabled
}
+
+ override val takServerChannel = MutableStateFlow(0)
+
+ override fun setTakServerChannel(index: Int) {
+ takServerChannel.value = index
+ }
}

diff --git a/docs/en/user/tak.md b/docs/en/user/tak.md
index 5baff3f92c..1cfb3dcc0a 100644
--- a/docs/en/user/tak.md
+++ b/docs/en/user/tak.md
@@ -2,7 +2,7 @@
title: TAK Integration
parent: User Guide
nav_order: 10
-last_updated: 2026-07-08
+last_updated: 2026-08-19
description: Interoperate with ATAK and WinTAK β€” CoT position sharing, TAK roles, and plugin setup.
aliases:
- tak
@@ -55,6 +55,7 @@ The app can also run a **local TAK server** so ATAK/iTAK on the **same device**
![Local TAK Server settings with enable toggle and export option](../../assets/screenshots/tak_server_enabled.png)
- **Enable Local TAK Server** β€” starts the loopback-only mTLS server on port **8089** for ATAK/iTAK connections from the same device.
+- **TAK Mesh Channel** β€” selects which Meshtastic channel outgoing TAK traffic is sent on (default: the primary channel, index 0). Incoming TAK traffic is accepted from any channel. Matches the equivalent setting on iOS and in the legacy ATAK plugin.
- **Export TAK Data Package** β€” generates a `.zip` data package that ATAK/iTAK can import to connect to this server.
## TAK Roles

diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/component/TAKConfigItemList.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/component/TAKConfigItemList.kt
index 2aee30cbde..6c0a2e78b8 100644
--- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/component/TAKConfigItemList.kt
+++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/component/TAKConfigItemList.kt
@@ -53,9 +53,11 @@ import org.jetbrains.compose.resources.stringResource
import org.koin.compose.koinInject
import org.meshtastic.core.common.BuildConfigProvider
import org.meshtastic.core.model.Capabilities
+import org.meshtastic.core.model.Channel
import org.meshtastic.core.model.getColorFrom
import org.meshtastic.core.model.getStringResFrom
import org.meshtastic.core.repository.NodeRepository
+import org.meshtastic.core.repository.RadioConfigRepository
import org.meshtastic.core.repository.TakPrefs
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.back
@@ -64,6 +66,9 @@ import org.meshtastic.core.resources.tak
import org.meshtastic.core.resources.tak_config
import org.meshtastic.core.resources.tak_role
import org.meshtastic.core.resources.tak_server
+import org.meshtastic.core.resources.tak_server_channel
+import org.meshtastic.core.resources.tak_server_channel_desc
+import org.meshtastic.core.resources.tak_server_channel_option
import org.meshtastic.core.resources.tak_server_enabled
import org.meshtastic.core.resources.tak_server_enabled_desc
import org.meshtastic.core.resources.tak_server_export_data_package_desc
@@ -110,6 +115,7 @@ import org.meshtastic.feature.settings.radio.RebootBehavior
import org.meshtastic.feature.settings.radio.ResponseState
import org.meshtastic.feature.settings.tak.TakPermissionHandler
import org.meshtastic.feature.settings.tak.rememberDataPackageExporter
+import org.meshtastic.proto.ChannelSet
import org.meshtastic.proto.MemberRole
import org.meshtastic.proto.ModuleConfig
import org.meshtastic.proto.Team
@@ -202,8 +208,27 @@ fun TakServerScreen(onBack: () -> Unit) {
val takPrefs: TakPrefs = koinInject()
val takServerManager: TAKServerManager = koinInject()
val nodeRepository: NodeRepository = koinInject()
+ val radioConfigRepository: RadioConfigRepository = koinInject()
val isTakServerEnabled by takPrefs.isTakServerEnabled.collectAsStateWithLifecycle()
val isMeshToCotEnabled by takPrefs.isMeshToCotEnabled.collectAsStateWithLifecycle()
+ val takServerChannel by takPrefs.takServerChannel.collectAsStateWithLifecycle()
+ val channelSet by radioConfigRepository.channelSetFlow.collectAsStateWithLifecycle(initialValue = ChannelSet())
+ // Options come from the radio's configured channels; the persisted index is appended as a bare
+ // number when it isn't among them (no radio connected yet, or the channel list shrank) so the
+ // dropdown never renders an empty selection.
+ val channelOptions =
+ channelSet.settings
+ .mapIndexed { index, settings ->
+ val channelName = Channel(settings, channelSet.lora_config ?: Channel.default.loraConfig).name
+ index to stringResource(Res.string.tak_server_channel_option, index, channelName)
+ }
+ .let { options ->
+ if (options.none { it.first == takServerChannel }) {
+ options + (takServerChannel to takServerChannel.toString())
+ } else {
+ options
+ }
+ }
val isTakServerRunning by takServerManager.isRunning.collectAsStateWithLifecycle()
val isTakServerStarting by takServerManager.isStarting.collectAsStateWithLifecycle()
val takClientCount by takServerManager.connectionCount.collectAsStateWithLifecycle()
@@ -264,6 +289,9 @@ fun TakServerScreen(onBack: () -> Unit) {
onEnabledChange = { takPrefs.setTakServerEnabled(it) },
isMeshToCotEnabled = isMeshToCotEnabled,
onMeshToCotChange = { takPrefs.setMeshToCotEnabled(it) },
+ takServerChannel = takServerChannel,
+ channelOptions = channelOptions,
+ onChannelSelected = { takPrefs.setTakServerChannel(it) },
status = takServerStatus,
clientCount = takClientCount,
onExport = { exportLauncher("Meshtastic_TAK_Server.zip") },
@@ -281,6 +309,9 @@ internal fun TakServerSection(
onEnabledChange: (Boolean) -> Unit,
isMeshToCotEnabled: Boolean,
onMeshToCotChange: (Boolean) -> Unit,
+ takServerChannel: Int,
+ channelOptions: List<Pair<Int, String>>,
+ onChannelSelected: (Int) -> Unit,
status: TakServerStatus,
clientCount: Int,
onExport: () -> Unit,
@@ -310,6 +341,15 @@ internal fun TakServerSection(
TakV1FallbackNotice()
}
HorizontalDivider()
+ DropDownPreference(
+ title = stringResource(Res.string.tak_server_channel),
+ summary = stringResource(Res.string.tak_server_channel_desc),
+ enabled = true,
+ items = channelOptions,
+ selectedItem = takServerChannel,
+ onItemSelected = onChannelSelected,
+ )
+ HorizontalDivider()
Row(
modifier = Modifier.fillMaxWidth().padding(horizontal = 16.dp, vertical = 12.dp),
horizontalArrangement = Arrangement.SpaceBetween,

diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/component/TAKConfigPreviews.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/component/TAKConfigPreviews.kt
index 1602f10567..933a471b59 100644
--- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/component/TAKConfigPreviews.kt
+++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/component/TAKConfigPreviews.kt
@@ -20,6 +20,9 @@ package org.meshtastic.feature.settings.radio.component
import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.PreviewLightDark
+import org.jetbrains.compose.resources.stringResource
+import org.meshtastic.core.resources.Res
+import org.meshtastic.core.resources.tak_server_channel_option
import org.meshtastic.core.takserver.TakTestResult
import org.meshtastic.core.ui.theme.AppTheme
import org.meshtastic.proto.MemberRole
@@ -48,6 +51,13 @@ fun TakServerSectionDisabledPreview() {
onEnabledChange = {},
isMeshToCotEnabled = false,
onMeshToCotChange = {},
+ takServerChannel = 0,
+ channelOptions =
+ listOf(
+ 0 to stringResource(Res.string.tak_server_channel_option, 0, "LongFast"),
+ 1 to stringResource(Res.string.tak_server_channel_option, 1, "tak"),
+ ),
+ onChannelSelected = {},
status = TakServerStatus.Off,
clientCount = 0,
onExport = {},
@@ -65,6 +75,13 @@ fun TakServerSectionEnabledPreview() {
onEnabledChange = {},
isMeshToCotEnabled = true,
onMeshToCotChange = {},
+ takServerChannel = 0,
+ channelOptions =
+ listOf(
+ 0 to stringResource(Res.string.tak_server_channel_option, 0, "LongFast"),
+ 1 to stringResource(Res.string.tak_server_channel_option, 1, "tak"),
+ ),
+ onChannelSelected = {},
status = TakServerStatus.WaitingForClient,
clientCount = 0,
onExport = {},
@@ -82,6 +99,13 @@ fun TakServerSectionConnectedPreview() {
onEnabledChange = {},
isMeshToCotEnabled = true,
onMeshToCotChange = {},
+ takServerChannel = 0,
+ channelOptions =
+ listOf(
+ 0 to stringResource(Res.string.tak_server_channel_option, 0, "LongFast"),
+ 1 to stringResource(Res.string.tak_server_channel_option, 1, "tak"),
+ ),
+ onChannelSelected = {},
status = TakServerStatus.Connected,
clientCount = 1,
onExport = {},
@@ -99,6 +123,13 @@ fun TakServerSectionFailedPreview() {
onEnabledChange = {},
isMeshToCotEnabled = true,
onMeshToCotChange = {},
+ takServerChannel = 0,
+ channelOptions =
+ listOf(
+ 0 to stringResource(Res.string.tak_server_channel_option, 0, "LongFast"),
+ 1 to stringResource(Res.string.tak_server_channel_option, 1, "tak"),
+ ),
+ onChannelSelected = {},
status = TakServerStatus.Failed,
clientCount = 0,
onExport = {},
@@ -116,6 +147,13 @@ fun TakServerSectionV1FallbackPreview() {
onEnabledChange = {},
isMeshToCotEnabled = true,
onMeshToCotChange = {},
+ takServerChannel = 0,
+ channelOptions =
+ listOf(
+ 0 to stringResource(Res.string.tak_server_channel_option, 0, "LongFast"),
+ 1 to stringResource(Res.string.tak_server_channel_option, 1, "tak"),
+ ),
+ onChannelSelected = {},
status = TakServerStatus.Connected,
clientCount = 1,
onExport = {},

diff --git a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionConnected_Dark_d19fbf1f_0.png b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionConnected_Dark_d19fbf1f_0.png
index 56ad2b162a..55907ea680 100644
Binary files a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionConnected_Dark_d19fbf1f_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionConnected_Dark_d19fbf1f_0.png differ

diff --git a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionConnected_Light_b29dc7a7_0.png b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionConnected_Light_b29dc7a7_0.png
index 10d0855473..2ed4050c63 100644
Binary files a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionConnected_Light_b29dc7a7_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionConnected_Light_b29dc7a7_0.png differ

diff --git a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionEnabled_Dark_d19fbf1f_0.png b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionEnabled_Dark_d19fbf1f_0.png
index 6d6472d433..2ce081886c 100644
Binary files a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionEnabled_Dark_d19fbf1f_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionEnabled_Dark_d19fbf1f_0.png differ

diff --git a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionEnabled_Light_b29dc7a7_0.png b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionEnabled_Light_b29dc7a7_0.png
index c2d479d6f4..5771443b47 100644
Binary files a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionEnabled_Light_b29dc7a7_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionEnabled_Light_b29dc7a7_0.png differ

diff --git a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionFailed_Dark_d19fbf1f_0.png b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionFailed_Dark_d19fbf1f_0.png
index d5fb90ebf3..17300432b0 100644
Binary files a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionFailed_Dark_d19fbf1f_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionFailed_Dark_d19fbf1f_0.png differ

diff --git a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionFailed_Light_b29dc7a7_0.png b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionFailed_Light_b29dc7a7_0.png
index 3261ed4b13..3bb47418e4 100644
Binary files a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionFailed_Light_b29dc7a7_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/SettingsScreenshotTestsKt/ScreenshotTakServerSectionFailed_Light_b29dc7a7_0.png differ

Served by rngit 1.5.2 - Generated in 0.35s